
#include "XMLParser.h"
#include "Constants.h"
#include "Game.h"
#include <vector>
using namespace std;

int main(int sruc, char* args[]){


	int parseResult;
	Document doc;
	Document defMandatory;
	Document defOptional;
	initDocument(&defMandatory,255);
	initDocument(&defOptional,255);

	//----------------------------------
	// Tiempo de parseo de la metadata
	//----------------------------------
	
	parseResult = parseFile("parserdefmandatory.xml", &defMandatory, NULL, NULL);
	if (parseResult == OPERATION_FATAL){	
		printf("Se ha detectado un error fatal, se detiene el parsing.\n");
		return 1;
	}

	parseResult = parseFile("parserdefoptional.xml", &defOptional, NULL, NULL);
	if (parseResult == OPERATION_FATAL){	
		printf("Se ha detectado un error fatal, se detiene el parsing.\n");
		return 1;
	}


	//------------------------------------------------------------------------------------
	//Tiempo de Buildeo del Dominio de los diferentes niveles: Settings, Shapes y Texturas
	//------------------------------------------------------------------------------------

	initDocument(&doc,255);

	DomainBuilder* builder = DomainBuilder::getInstance();
	Game* game = Game::getInstance();

	//Genera el nivel
	int level = 1;
	int levelExists = game->prepareLevel(level, &doc, &defMandatory, &defOptional, true); 

	while (levelExists != 1){
		//Mientras exista otro nivel el juego continua...

		//Genera las paredes del tablero y las agrega a al vector de Shapes
		game->buildWalls();

		// let's play mother fucker!!!!!!! ;)
		game->play();
	
		if(game->getStatus() == FINISHED) {
			//Termina el nivel, busca el proximo
			printf("Nivel %i Terminado Con Exito, Felicitaciones.\n",level);
			level++;
			game->reset();
			Game* game = Game::getInstance();
			initDocument(&doc,255);

			levelExists = game->prepareLevel(level, &doc, &defMandatory, &defOptional, false); 
		}else{
			levelExists = 1 ;
			printf("Juego Abortado.\n");
		}
		
	}

	//dibuja la imagen final
	game->drawLevelBackground("end");

	printf("Juego Terminado.\n");

		
	//----------------------------------------------------------
	//Tiempo de Destruction
	//----------------------------------------------------------

	delete builder;
	delete game;
	
	return 0;

}


